package com.bdqn.reflect.service.impl;

import com.bdqn.design.factory.SimpleDaoFactory;
import com.bdqn.reflect.dao.PersonDao;
import com.bdqn.reflect.pojo.Person;
import com.bdqn.reflect.service.PersonService;

import java.util.List;

/**
 * PersonServiceImpl
 *
 * @author LILIBO
 * @since 2025/1/3
 */
public class PersonServiceImpl implements PersonService {

    // 引入DAO层实现类
    private PersonDao personDao;

    public void setPersonDao(PersonDao personDao) {
        this.personDao = personDao;
    }

    /**
     * 无参构造器
     * 默认使用MySQL的DAO层实现类
     */
    public PersonServiceImpl() {
        personDao = SimpleDaoFactory.getInstance();
    }

    /**
     * 外部传入需要的DAO层实现类
     *
     * @param personDao
     */
    public PersonServiceImpl(PersonDao personDao) {
        // 初始化DAO层实现类
        this.personDao = personDao;
    }

    /**
     * 获取人的列表
     *
     * @return
     */
    @Override
    public List<Person> list() {
        return personDao.list();
    }

    /**
     * 获取人的列表
     *
     * @param personDao
     * @return
     */
    @Override
    public List<Person> list(PersonDao personDao) {
        return personDao.list();
    }

    /**
     * 转账
     *
     * @param from 转出人
     * @param to 转入人
     * @param money 金额
     * @return true：成功 false：失败
     */
    @Override
    public boolean transfer(Person from, Person to, int money) {
        System.out.println("转账中。。。");
        // 转出人余额减少
        from.setMoney(from.getMoney() - money);
        System.out.println("update account set money = " + from.getMoney() + " where name = " + from.getName() + ";");
        // 模拟转账失败
        // int result = money / 0;
        // 转入人余额增加
        to.setMoney(to.getMoney() + money);
        System.out.println("update account set money = " + to.getMoney() + " where name = " + to.getName() + ";");
        // 模拟转账成功
        return true;
    }

}
